package fag.core.model;

import java.util.HashMap;
import java.util.Map;


/**
 * Singleton du bac à modèles. Le bac à modèles reference, partage, et libère, les données extrinsèques
 * des vues. 
 * @author lumz
 *
 */
public class ModelPool {

	private static ModelPool instance = null;
	private Map<String, Model> pool = new HashMap<String, Model>();
	
	/**
	 * Constructeur par défault.
	 */
	private ModelPool() {}
	
	/**
	 * Getter du bac à modèles.
	 * @return L'instance singleton du bac à modèles.
	 */
	public static ModelPool get() {
		
		if(instance == null)
			instance = new ModelPool();
		
		return instance;
	}
	
	/**
	 * Accéder à un modèle partagé.
	 * @param name Nom du modèle à partager.
	 * @return Le modèle à partager ou null si le modèle n'existe pas.
	 */
	public Model acquire(String name) {
		return pool.get(name);
	}
	
	/**
	 * Enregistre un nouveau modèle, pour permettre le partage entre les vues.
	 * Les noms de modèles sont uniques. Si un modèle est enregistré alors que le nom
	 * est déjà utilisé, rien ne se passe.
	 * @param name Nom du modèle à enregistrer.
	 * @parma model Modèle à enregistrer.
	 */
	public void register(String name, Model model) {
		pool.put(name, model);
	}
	
	/**
	 * Libérer un modèle.
	 * @param name Nom du modèle à libérer.
	 */
	public void release(String name) {
		pool.remove(name);
	}
}
